package com.kgc.scd.service;

import com.kgc.scd.bean.Order;
import com.kgc.scd.bean.Seckill;

/**
 * Created On : 2022/6/7.
 * <p>
 * Author     : 98730
 * <p>
 * Description: 秒杀抢购的业务接口
 */
public interface SeckillBuyService {

    /**
     * @author : 98730
     * @date   : 2022/6/7
     * @param  : [java.lang.String]
     * @return : boolean
     * @description : 限制商品抢购的用户数量
     */
    boolean limitBuyUserCount(String prodId);

    /**
     * @author : 98730
     * @date   : 2022/6/7
     * @param  : [java.lang.String]
     * @return : void
     * @description : 初始化商品库存到redis
     */
    void initProdStock2Redis(String prodId);

    /**
     * @author : 98730
     * @date   : 2022/6/7
     * @param  : [java.lang.String, java.lang.Integer]
     * @return : boolean
     * @description : 校验商品库存是否大于购买数量，
     */
    boolean checkProdStockEnough(String prodId, Integer buyCount);

    /**
     * @author : 98730
     * @date   : 2022/6/7
     * @param  : [java.lang.String, java.lang.String]
     * @return : boolean
     * @description : 当前抢购用户，是否没买过当前商品
     */
    boolean checkSeckillUserBought(String userId, String prodId);

    /**
     * @author : 98730
     * @date   : 2022/6/7
     * @param  : [java.lang.String]
     * @return : boolean
     * @description : checkProdStockLocked
     */
    boolean checkProdStockLocked(String prodId);

    /**
     * @author : 98730
     * @date   : 2022/6/7
     * @param  : [java.lang.String, java.lang.Integer]
     * @return : boolean
     * @description : 扣减库存
     */
    boolean subProdStock(String prodId, Integer buyCount);

    /**
     * @author : 98730
     * @date   : 2022/6/7
     * @param  : [java.lang.String]
     * @return : void
     * @description : 释放库存锁
     */
    void unlockProdStock(String prodId);

    /**
     * @author : 98730
     * @date   : 2022/6/8
     * @param  : [java.lang.String, java.lang.Integer]
     * @return : java.lang.String
     * @description : 生成抢购订单
     */
    Order createOrder(String userId, String proId);

}
